package com.ruoyi.smart.mqtt.handler;

import com.ruoyi.smart.mqtt.MessageHandler;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Component;

/**
 * 环境传感器数据处理器
 * 处理所有环境传感器上报的数据
 */
@Slf4j
@Component
public class EnvironmentalDataHandler implements MessageHandler {

    @Override
    public String getTopicFilter() {
        // 匹配所有环境数据上报主题，如: sch/gw001/env/data, sch/gw002/env/data
        return "sch/+/env/data";
    }

    @Override
    public void handleMessage(String topic, MqttMessage message) {
        String payload = new String(message.getPayload());
        log.info("处理环境传感器数据: topic={}, data={}", topic, payload);

        try {
            // 1. 从主题中提取设备ID
            String[] topics = topic.split("/");
            String gatewayId = topics[1]; // 获取网关ID

            // 2. 解析和处理数据（这里需要根据实际协议实现）
            processEnvironmentalData(gatewayId, payload);

        } catch (Exception e) {
            log.error("处理环境数据失败: topic={}", topic, e);
            throw new RuntimeException("处理环境数据失败", e);
        }
    }

    private void processEnvironmentalData(String gatewayId, String payload) {
        // 这里实现具体的数据解析和业务逻辑
        // 例如: 解析JSON，保存到数据库，更新缓存等
        log.debug("网关 {} 上报环境数据: {}", gatewayId, payload);

        // 示例: 假设payload是JSON格式: {"temp": 25.5, "humi": 60, "pm25": 35}
        // ObjectMapper mapper = new ObjectMapper();
        // EnvironmentalData data = mapper.readValue(payload, EnvironmentalData.class);
        // environmentalService.saveData(gatewayId, data);
    }
}
